/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import ejb.excepciones.ExcepcionExistencias;
import ejb.negocio.CompraServiceLocal;
import ejb.negocio.ProductoCompra;
import entidades.Pedido;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author ribadas
 */
@ManagedBean(name = "carroCompraController")
@SessionScoped
public class CarroCompraController extends BaseController {

    // Atributos
    ProductoCompra productoCompraActual = null;
    Pedido pedido = null;
    double importeTotal;

    // Acceso al Managed Bean usuarioController (necesario para recuperar datos del cliente actual)
    @ManagedProperty(value = "#{usuarioController}")
    UsuarioController usuarioController;
    public UsuarioController getUsuarioController() {
        return usuarioController;
    }
    public void setUsuarioController(UsuarioController usuarioController) {
        this.usuarioController = usuarioController;
    }
    // EJBs
    @EJB
    CompraServiceLocal compraFacade;

    /** Creates a new instance of CarroCompraController */
    public CarroCompraController() {
    }

    // Acciones

    public String doAnadirProducto(long idProducto) {
        String destino = null;
        compraFacade.anadirProducto(idProducto, 1);
        importeTotal = compraFacade.calcularImporteTotal();
        return destino; // Se queda en la misma página (lista de productos)
    }

    public String doIncrementarCantidad(long idProducto) {
        String destino = null;
        compraFacade.incrementarCantidad(idProducto, 1);
        importeTotal = compraFacade.calcularImporteTotal();
        return destino;  // Se queda en la misma página
    }

    public String doEliminarProducto(long idProducto) {
        String destino = null;        
        compraFacade.eliminarProducto(idProducto);
        importeTotal = compraFacade.calcularImporteTotal();
        return destino; // Se queda en la misma página
    }

    public String doActualizarCarro() {
        String destino = null;
        importeTotal = compraFacade.calcularImporteTotal();
        return destino;
    }

    public String doConfirmarCarroCompra() {
        String destino = null;
        if (usuarioController.getClienteActual() == null) {
            anadirMensajeError("No hay un cliente registrado vinculado a esta compra");
            //destino = "compra.sin.cliente";
            destino = null; // recargar la pagina informando del error
        } else {
            try {
                compraFacade.establecerCliente(usuarioController.getClienteActual().getId());
                compraFacade.confirmarCarro();
                pedido = compraFacade.generarPedido();
                destino = "compra.completada";
            } catch (ExcepcionExistencias e) {
                anadirMensajeError("Existencias insuficientes del producto " + e.getDescripcionProducto());
                //destino = "compra.sin.existencias";
                destino = null; // recargar la pagina informando del error
            }
        }
        return destino;
    }

    public String doVaciarCarroCompra() {
        String destino = null;
        vaciarCarro();
        return "carroCompra.xhtml";   // Fuerza a reconstruir la página
    }

    // Metodos get y set
    public double getImporteTotal() {
        return importeTotal;
    }

    public void setImporteTotal(double importeTotal) {
        this.importeTotal = importeTotal;
    }


    public ProductoCompra getProductoCompraActual() {
        return productoCompraActual;
    }

    public void setProductoCompraActual(ProductoCompra productoCompraActual) {
        this.productoCompraActual = productoCompraActual;
    }

    public List<ProductoCompra> getProductos() {
        return compraFacade.obtenerCarroCompra();
    }

    public Pedido getPedido() {
        return pedido;
    }

    public void setPedido(Pedido pedido) {
        this.pedido = pedido;
    }

    // Metodos publicos
    public void vaciarCarro() {
        compraFacade.vaciarCarro();
        importeTotal = 0.0;
    }

    // Metodos privados
}

